﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Xml;
using TestesFixacao.Core.Extensions;
using TestesFixacao.Dominio;
using TestesFixacao.Dominio.Modelos;
using TestesFixacao.Dominio.Repositorios;

namespace TestesFixacao.ConsoleApp
{
    public class Program
    {
        private static void Main(string[] args)
        {
            RepositorioDisciplina repositorio = new RepositorioDisciplina();
            repositorio.Importa("Disciplinas.xml");

            var list = repositorio.SelecionaTodos();

            var readerRoot = new XmlTextReader("Disciplinas.xml");

            int numeroDisciplinas = 0;

            var readerDisciplinas = readerRoot.ElementCount("disciplinas", "disciplina", ref numeroDisciplinas);

            var disciplinas = new List<Disciplina>();

            for (int a = 0; a < numeroDisciplinas; a++)
            {
                readerDisciplinas.ReadStartElement("disciplina");

                var disciplina = new Disciplina();

                disciplina.Nome = readerDisciplinas.ReadElementString("nome");

                int numeroQuestoes = 0;

                var readerQuestoes = readerDisciplinas.ElementCount("questoes", "questao", ref numeroQuestoes);

                readerQuestoes.ReadStartElement("questoes");

                for (int i = 0; i < numeroQuestoes; i++)
                {
                    var questao = new Questao();

                    readerQuestoes.ReadStartElement("questao");

                    questao.Enunciado = readerQuestoes.ReadElementString("enunciado");

                    questao.Bimestre = int.Parse(readerQuestoes.ReadElementString("bimestre"));

                    questao.Numero = int.Parse(readerQuestoes.ReadElementString("numero"));

                    int numeroalternativas = 0;

                    var readerAlternativas = readerQuestoes.ElementCount("alternativas", "alternativa", ref numeroalternativas);

                    readerAlternativas.ReadStartElement("altertivas");

                    questao.Alternativas = new List<Alternativa>(numeroalternativas);

                    for (int j = 0; j < numeroalternativas; j++)
                    {
                        var alternativa = new Alternativa();

                        readerAlternativas.ReadStartElement("alternativa");

                        alternativa.Letra = char.Parse(readerAlternativas.ReadElementString("letra"));
                        alternativa.Resposta = readerAlternativas.ReadElementString("resposta");
                        alternativa.Correta = bool.Parse(readerAlternativas.ReadElementString("correta"));

                        readerAlternativas.ReadEndElement();

                        questao.AdicionaAlternativa(alternativa);
                    }

                    readerQuestoes.ReadEndElement();

                    disciplina.AdicionaQuestao(questao);
                }

                readerDisciplinas.ReadEndElement();

                disciplinas.Add(disciplina);
            }

            Console.ReadKey();
        }
    }
}